﻿/*
7-28 猴子选大王 (20 分)
一群猴子要选新猴王。新猴王的选择方法是：让N只候选猴子围成一圈，从某位置起顺序编号为1~N号。从第1号开始报数，每轮从1报到3，凡报到3的猴子即退出圈子，接着又从紧邻的下一只猴子开始同样的报数。如此不断循环，最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王？

输入格式：
输入在一行中给一个正整数N（≤1000）。

输出格式：
在一行中输出当选猴王的编号。

输入样例：
11
输出样例：
7
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

static void array_remove(int a[], int *n, int index) {
	for (int i = index + 1; i < *n; i++) {
		a[i - 1] = a[i];
	}
	--(*n);
}

static int select_king(int a[], int n) {
	int m = 0;
	while (n > 0) {
		m += 2;
		m %= n;
		array_remove(a, &n, m);
	}
	return a[0];
}

int main() {
	freopen("D:/Develop/GitRepos/MOOC/浙江大学/数据结构/201906/zju_C_Basic/data/7.28.txt", "r", stdin);
	int n;
	int datas[1001] = {};
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		datas[i] = i + 1;
	}
	n = select_king(datas, n);
	printf("%d", n);
	return 0;
}